package path.calculator;

import java.util.LinkedList;

public class Permutation<T extends Comparable<T>> {
    private LinkedList<T> values = new LinkedList<T>();

    public Permutation() {
    }

    public Permutation(T... values) {
        for (T t : values)
            this.values.add(t);
    }

    public void addNode(T node) {
        values.add(node);
    }

    public boolean valuesAre(T... values) {
        for (int i = 0; i < this.values.size(); ++i)
            if (this.values.get(i) != values[i])
                return false;

        return true;
    }

    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer();
        for (T t : values)
            buffer.append(t);

        return buffer.toString();
    }

    @SuppressWarnings("unchecked")
    @Override
    public boolean equals(Object object) {
        if (object instanceof Permutation) {
            Permutation<T> rhs = (Permutation<T>) object;
            return values.equals(rhs.values);
        }
        return false;
    }

    public int length() {
        return values.size();
    }

    public T get(int index) {
        return values.get(index);
    }
}
